概要今日市場には、デジタルカメラ、カラースキャナ、カラープリンタなど、さまざまな種類のイメージングデバイスがあり、それぞれ大きく異なる方法で色を表現します。カラースペース(色空間)と色域(色の範囲)はデバイスごとに異なります。このために当然、あるデバイスで取得した文書を、ほかのデバイスに正しくレンダリングするのは非常に難しくなります。この問題に対する解決策が、異種のデバイス間で一貫した色を提供することを目的とした完全なカラーマネージメントシステム、ColorSync です。 ColorSync 技術を支える 2 つの主要な要素は、ICC(International Color Consortium、国際カラーコンソーシアム)プロファイルと CMM(Color Management Modules)の 2 つです。 ICC プロファイルICC プロファイルは、ICC によって定義されているクロスプラットフォームのファイル形式で、デバイスの色空間から中間の色空間に色を変換する方法を記述したデータを含む文書です。このファイル形式では、さまざまな種類のデバイスの記述が可能です。データ形式は、極めて柔軟なものになるように作られており、開発者はオプションタグを使って形式を拡張できます。また、この形式は、絶えず改良されており、進化し続けています。 CMMプロファイルをカラーマネージメントに使うデータと考えるとすれば、CMM はコードです。CMM は、プロファイルからプロファイルへの変換を行う計算エンジンです。アップルでは、ColorSync の一部として、標準の CMM である Apple CMM を出荷しています。これは、アップルが、Mac OS 9 で出荷する標準の CMM と同じです。 ただし、このシステムは、オープンで拡張可能なものとして設計されています。したがって、独自に色変換の手段を提供したい第三者も、独自に CMM を開発することができます。 次に、ColorSync が、Mac OS X のアーキテクチャにどのように組み込まれているかを示します。 ![]() 図 1. Mac OS X アーキテクチャと ColorSync Mac OS X は、ColorSync 2.0 またはそれ以降の API を完全サポートしています。これは、開発者が、自分のアプリケーションを Mac OS X に移植するのが非常に簡単であることを意味します。Mac OS X の ColorSync には、利用すると便利ないくつかの強化機能を提供する新しい API もあります。また、Mac OS X の Quartz と印刷モデルは、ColorSync を最大限に活用しています。 ColorSync と QuartzMac OS X において、ColorSync には、単なる標準アプリケーションサービスを超えた新たな役割が与えられています。ColorSync は、ほかのシステムコンポーネントにカラーマネージメントを提供するのに使われるようになっています。これらのコンポーネントの 1 つに、PDF のイメージングモデルに基づいたアップルの新しいグラフィックスシステム、Quartz があります。Quartz は、カラーマネージメントの新しいパラダイムを作り、ColorSync 機能にアクセスするもう 1 つの手段となっています。 ColorSync と Quartz のカラーマネージメントここでの我々の目的は、いくつかの基本要件を満たしながら、グラフィックスサービスとカラーマネージメントサービスを統合することです。まず、Quartz には、さまざまな色空間と不透明度を組み合わせる機能が必要でした。この要件を満たすために、ColorSync が、多種多様の色空間のデータを、Quartz がコンポジターの作業空間として選択した色空間に変換するのに使われます。 2 番目の要件は、開発者のニーズに重点を置いたもので、Quartz を使うすべてのアプリケーションが、カラーマネージメントを行う必要があるという事実に基づいています。これも、広範な種類のアプリケーションのニーズに応える、スケーラブルなソリューションでなければなりません。アプリケーションのカラーマネージメントへの関与が、Quartz により事前に定義されているいくつかのデフォルトの設定に限られた必要最小限なものになることもあります。または逆に、アプリケーションが、カラーマネージメントに対して、直接 ColorSync にアクセスするときと同等の完全なコントロールを握ることもあります。その他の要件としては、色の精度、パフォーマンス、および PDF との互換性などがあります。 簡単にいえば、Quartz のカラーマネージメントは、Quartz の作成する PDF の色データを処理するエンジンとして使われる ColorSync を中心にして構築されているといえます。 ![]() 図 2. Quartz カラーマネージメント PDF の色モデルこの構成についてさらに理解するため、次に PDF および ColorSync の色に関する基本的な考え方を取り上げます。 PDF の色定義PDF では色は、デバイスの色空間、補正(キャリブレート)された色空間、および ICC ベースの色空間という既知の色空間のいずれかによって定義されます。 表 1. PDF の色空間
上記のリストは実質的に、カラーマネージメントの歴史を反映しています。最初は、デバイスの色空間だけがサポートされていました。今日となっては、デバイスの色空間は、さまざまなプロセス色モデルに対して 1 つの仕様を提供するものでしかありません。色の見え方はデバイスに依存しているので、デバイスの色空間は、異種のデバイス間で忠実に色を再現するには最悪の選択です。 次に、デバイスに依存しない色を使った色変換という考えの基に、色をキャリブレートするという方法が考案されました。この方法の利点は、異種デバイス間のカラーマッチングが大幅に改善されることです。その後に PDF のキャリブレートされた色空間が続きます。後に、キャリブレートされた色は、PDF のキャリブレートされた色、標準の形式、つまり ICC プロファイルへと発展しました。ICC プロファイルに基づいたカラーマネージメントが普及してきて、色の専門家の間で、事実上の標準となると、PDF は、ICC ベースの色空間を追加し、ICC プロファイルを PDF 文書に埋め込めるようにしました。 PDF の色変換PDF の色変換は、ソースの色空間、出力先の色空間、およびレンダリングインテントの関数として表せます。次のレンダリングインテントの値に注意してください。 ![]() 図 3. PDF の色変換 ColorSync/ICC の色モデル次に、ICC と ColorSync の色と色変換がどのように定義されているかを見てみましょう。 ICC の色定義色は当然ながら、ICC プロファイルにより定義されます。前述のとおり、ICC プロファイルは、色空間の記述では最も一般的な形式です。 ICC の色変換ICC 色変換は、PDF の色変換と非常によく似ています。違いは、ソースと出力先のプロファイルの間に中間プロファイルを挿入できる点です。 ![]() 図 4. ICC の色変換 これらの追加のプロファイルは、ソフトプルーフ(色校正)、カラーデバイスのシュミレーション、特殊効果の適用などのために使用されます。図に示したように、ICC の色変換のレンダリングインテントの値は、PDF のレンダリングインテントの値と同じです。 レンダリングインテント = {知覚的, 相対的測色, 彩度, 絶対的測色} Quartz の色モデルPDF の色モデルと ICC の色モデルの統合Quartz の色モデルは、ICC の色モデルと PDF の色モデルを統合することによって作られました。このモデルの興味深い特徴を次に示します。Quartz では、PDF の色空間はすべて ICC プロファイルとして表されます。デバイスの色空間には次のようにデフォルトのプロファイルが割り当てられます。
キャリブレートされた色空間には、キャリブレーションレコードが含まれています。このレコードは、ICC プロファイルとして非常に簡単に再パッケージ化できます。最後に、ICC ベースの色空間は、自身の ICC プロファイルを提供します。 PDF の色空間の等価性Quartz が PDF から継承したもう 1 つの単純ながら非常に重要な概念は、色空間の等価性の概念です。色変換は、ソースの色空間が出力先と異なる場合にだけ必要になるという暗黙のルールがあります。Quartz はこの単純なルールを利用して、複数のレンダリング段階からなる色データの流れを正しく構成します。 ![]() 図 5. 色空間の等価性 1 つまたは複数の ICC プロファイルから構成される色空間前述したように、Quartz では、すべての PDF の色空間が、PDF のイメージングモデルのもとで動作しているすべてのアプリケーションの間でシームレスかつ透過的な形で、1 つの ICC プロファイルとして表現されています。しかしそれと同時に、Quartz には 3 つ以上のプロファイルのための色変換を作成する機能が必要でした。このため、1 つ以上の ICC プロファイルで構成することができる色空間が設計されました。これにより、1 つのソースを 1 つの出力先に対応させるという PDF の考え方を維持できると同時に、高度なカラーマネージメントに適した複雑な色変換を作成できます。このような色空間を PDF に埋め込む必要が生じた場合は、色空間に含まれている複数のプロファイルは、ColorSync により 1 つのプロファイルに結合されます。 Quartz の描画モデルにおける色処理今度は、Quartz の描画モデルにおいて、これまで記述したすべてのものが実際にはどのような形で合わさって、望みの色の処理を行うのかを見てみましょう。最も高い視点から見たとき、このモデルには、3 つの主要コンポーネントがあります。
色の処理においては、アプリケーションは、PDF の任意の色空間を使ってデータをレンダリングするよう Quartz に 要求できます。Quartz はこれを行うために、すべての PDF の色空間を ICC プロファイルに変換します。デフォルトのプロファイルは Quartz により選択されますが、アプリケーションはこれをオーバーライドすることもできます。Quartz は、作業空間においてすべての合成を行い、ColorSync が、ソースの任意の色空間から作業空間への色変換を行うために呼び出されます。最後に、合成作業が終了すると、ラスタデータは、指定の出力先へ送られます。もちろん、出力先の色空間が作業空間と一致していない場合には、さらに変換を行わなければなりません。 いくつかの色処理を例に、Quartz のカラーマネージメントがどのように便利かを見てみましょう。たとえば、すべてのデータに特殊効果を適用する場合、抽象プロファイルを作業空間に追加するだけで非常に簡単に実現できます。次の図に示すように、どの作業空間への変換にも、抽象プロファイルを定義する変換が含まれます。 ![]() 図 6. 抽象プロファイルに対する特殊効果の適用 別の例としては、ソフトプルーフが考えられます。この場合にしなければならない唯一のことは、プリンタプロファイルを作業空間に追加することだけです。これにより、プリンタプロファイルを定義するすべての色補正が作業空間に反映され、標準ディスプレイ上に表示されます。 ![]() 図 7. 標準ディスプレイ上での印刷出力のソフトプルーフ 複数のプロファイルからなる色空間を使用できるのは、Quartz 内部に限られません。アプリケーションもまた、使用できます。次に、特定の色効果を演出するために、特定の色空間を使って、自由変形の色空間を作成するアプリケーションの例を示します。 ![]() 図 8. 自由変形色空間を使用した色効果の演出 Quartz の出力のフロントエンドQuartz のカラーマネージメントに関する説明の最後として、Quartz からの印刷時に色がどのように処理されるかを見てみましょう。これまで、ソースから出力先までの色データの主な流れについて説明しました。しかしここでは、さらにもう 1 つの処理が可能です。データ内容は、印刷用に PDF 形式でスプールすることができます。スプールされた内容は、プリントセンターによって処理されます。スプールされたデータに関して非常に重要な事実が 1 つあります。すでに指摘したとおり、PDF のスプールデータでは、すべての色データにタグが付けられます。ColorSync による処理の場合とまったく同じように、データにプロファイルが割り当てられます。 ![]() 図 9. PDF のスプールデータはタグが付けられる Quartz のラスタ印刷のバックエンドColorSync のカラーマッチングQuartz は、この PDF のスプールデータを、印刷のバックエンドでラスタライズするためにも使われます。カラーマネージメントの観点から、この段階における選択肢は 2 つあります。最初の選択肢は、ColorSync を使ってカラーマッチングをすることです。この場合、PDF のスプールデータの色データはすべてプリンタプロファイルに変換されます(注意:スプール PDF にはデバイスデータはありません)。 ![]() 図 10. プリンタプロファイルに変換されるスプール PDF カスタムドライバカラーマッチングもう 1 つの選択肢は、ユーザ定義のドライバによるカラーマッチングです。色データは、システムが提供するデフォルトプロファイルの色空間において引き渡されます。その結果、同じデフォルトプロファイルのタグが付けられているすべてのデータは、そのまま残ります。その他の色データは当然、ColorSync によりシステムプロファイルに変換されます。 ![]() 図 11. カスタムドライバカラーマッチング PostScript のバックエンドにおける QuartzColorSync は、PostScript のバックエンドでも使われます。カラーマネージメントの観点から、ここでの目的は、スプールされた PDF に含まれている色空間を、PostScript の色空間配列(CSA)に変換することです。Quartz には、PDF のキャリブレートされた色空間を、直接 PostScript の CSA に変換する機能が組み込まれています。すべての ICC プロファイルが、ColorSync を使って PostScript の CSA に変換されます。 ![]() 図 12. PostScript CSA に変換される ICC プロファイル
タグなしデータの印刷タグなしデータの印刷時におけるプリントシステムの動作に関する一般注意事項を以下に示します。 PDF の表示PDF 内のタグなし RGB データは、汎用 RGB プロファイルでタグ付けされるため、スクリーンに対してカラーマッチングされます。 印刷のフロントエンドソースデータをプリントシステムに渡すとき、印刷フロントエンドではプリントジョブが PDF 形式でスプールされます。そして、前述の「Quartz の出力のフロントエンド」で説明したように、スプール PDF では色データがすべてタグ付けされます。したがって、タグなしの RGB ソースデータを印刷のためにプリントシステムに渡すと、ColorSync はデータを汎用 RGB プロファイルでタグ付けします(PDF データの表示のときと同じ)。 印刷のバックエンドMac OS X での印刷時には、ColorSync によってソースデータが、プリンタドライバの提供する任意のプロファイルを使ってマッチングされます。そのため、プリンタドライバはこのテクニカルノートで説明する Device API を使用してデバイスに対応するプロファイルを登録する必要があります。 ラスター印刷プリンタドライバがプロファイルを提供しない場合、ColorSync は汎用 RGB プロファイルを代わりに使用します。 PostScript 印刷元々タグ付けされていない RGB データは最終的には、汎用 RGB プロファイルに基づいて CIEBasedABC 色空間に変換されます。 複数スクリーンへの描画「ColorSync と Quartz」のセクションで説明したように、Quartz では幅広い種類の ICC ベースの色空間が提供されます。このセクションでは、ColorSync デバイス統合化データベースへのアクセスを可能にする色空間を取り上げます。 その例としては、スクリーンへの直接の描画を可能にする色空間があります。まず、Display RGB 色空間があります。これは、実質的には標準ディスプレイプロファイルに対するラッパーです。また、2 つのプロファイルで構成される Display Gray があります。これは、グレーを RGB に変換するデバイスリンクプロファイルであり、標準ディスプレイプロファイルにアタッチされます。そしてさらに高度な用途のために、Display with ID 空間があります。これは、Display By AVID プロファイルに対するラッパーです。 ![]() 図 13. スクリーンへの直接の描画を可能にする色空間 Mac OS X v10.3 "Panther" の Quartz は、複数のスクリーンへの描画にかかわる問題の解決に役立ちます。アプリケーションには、3 つの基本的な選択肢があります。1 つは「単純モデル」と定義できるものです。もう 1 つは「完全モデル」と定義できます。最後の 1 つは、この 2 つの技法を組み合わせたものです。 これらは、次の特徴を持っています。 アプリケーションの選択肢 単純モデル
完全モデル
上記の何らかの組み合わせ
Mac OS X 上のプロファイルMac OS 9 では従来より、プロファイルは、「System」フォルダの「Profile」フォルダに格納されます。このフォルダにアクセスする必要があるアプリケーションでは、次のように、
同等の手法として、Mac OS /System/Library/ColorSync/Profiles/ これは、ほかのプロファイルが間違って失われたり損傷を受けたりした場合に、ColorSync が、重要な処理を行うために内部で使うプロファイルを格納する場所です。このフォルダは、ロックされ保護されていますが、ファイルを読み込めるようにこのフォルダにアクセスする必要がある場合は、次のように、
ColorSync プロファイルは主に次の場所に格納されます。 /Library/ColorSync/Profiles/ これは、ColorSync が、プロファイルのほとんどを格納する場所です。これは読み書き可能なフォルダです。プロファイルを読み込めるようにこのフォルダにアクセスする必要がある場合は、次のように、
ネットワーク環境の中で、ネットワーク管理者がネットワーク上に、ネットワークデバイスのプロファイルを格納している場合は、次の場所に格納することができます。 /Network/Library/ColorSync/Profiles/ これらのプロファイルを読み込めるようにこのフォルダにアクセスする必要がある場合は、次のように
最後に、ユーザは、各自のホームディレクトリに、各自のプロファイルを格納することができます。 ‾/Library/ColorSync/Profiles/ これらのプロファイルを読み込めるようにこのフォルダにアクセスする必要がある場合は、次のように
Mac OS 9 と同じように、Mac OS X の ColorSync も、上記のディレクトリにあるサブフォルダ(1 つ下の階層)、またはこれらのフォルダまたはプロファイルのエイリアスの検索をサポートしています。つまり、Mac OS X には、プロファイルを格納できる場所が非常に多くあります。アプリケーションでユーザにプロファイルの一覧を提示したければ、 この API に関して記述すべき 1 つの重要な点は、Mac OS X システムに加え、Mac OS Classic のシステムフォルダを用意している場合、ColorSync はデフォルトでは、プロファイルの検索時、Mac OS Classic のシステムフォルダの中を探しません。ただし、アプリケーションがこの場所のプロファイルにアクセスする場合には、
要約すると、アプリケーションは、次の場所、またはそのサブフォルダにプロファイルを置くようにするとよいでしょう。 /Library/ColorSync/Profiles/ ユーザは、個人のプロファイルを次の場所に置くことができます。 ‾/Library/ColorSync/Profiles/ プロファイルに関する要件Mac OS 9 では従来より、プロファイルは、ファイルタイプとクリエータ(タイプ - ' ColorSync プロファイルと旧式のファイルの実際の違いは、正当な ICC プロファイルであるかどうかという点です。ColorSync は、ヘッダブロックの適切なオフセット位置に、署名バイトの並び、 新しい省略可能なプロファイルのタグMac OS X の主な特徴の 1 つは、Mac OS X が、多言語対応のオペレーティングシステムであることです。ColorSync は、ICC プロファイルにも同じ機能を提供するようになりました。現在、ICC のファイル形式は、表示の目的で、プロファイルの記述を ASCII、UniCode、および ScriptCode のそれぞれで格納する必須タグ、'desc' を定義します。しかし、この構造では、UniCode または Script を使った場合にだけ、プロファイルを、特定の言語にローカライズできます。プロファイルのベンダは、さまざまな国に向け多数のローカライズバージョンを出荷しなければなりません。また、ローカライズされたプロファイルを埋め込んだ文書を、違う言語を使うシステムに移したときにも問題が生じます。ColorSync は、この状況を是正するために、新しい省略可能なタグを定義しました。 - ' このタグには、プロファイルに対応付けられている、多言語による Unicode 文字列のセットが含まれています。また、このタグに簡単にアクセスできるようにいくつかの新しい API も提供されています。 CMError CMCopyProfileLocalizedStringDictionary (CMProfileRef prof, OSType tag, CFDictionaryRef* dict); prof - 照会対象のプロファイル。 tag - 照会対象プロファイルのタグのタイプ。 dict - 辞書を返します。 この API により、指定のタグから、多言語対応のロケールと文字列を含む CMError CMSetProfileLocalizedStringDictionary (CMProfileRef prof, OSType tag, CFDictionaryRef dict); prof - 修正対象のプロファイル。 tag - 修正対象プロファイルのタグのタイプ。 dict - 修正対象の辞書。 しかし、ほとんどのアプリケーションでは、プロファイルから 1 つの特定の文字列だけを取得することが要求されます。このために、 CMError CMCopyProfileLocalizedString (CMProfileRef prof, OSType tag, CFStringRef reqLocale, CFStringRef* locale, CFStringRef* str); prof - 照会対象のプロファイル。 tag - 照会対象プロファイルのタグのタイプ。
locale - ロケールを返す(省略可能)。 dict - 辞書文字列を返す(省略可能)。 次に、この関数の使用法を示す短いコード例を示します。 err = CMCopyProfileLocalizedString (prof, 'dscm', CFSTR("enUS"), nil, &theStr); ICC4 プロファイルICC は、プロファイルがより優れた柔軟性と強化された機能を提供できるように、新しいファイル形式に取り組んできました。この新しいファイル形式とは、ICC 4.0 プロファイルの形式仕様です。次に、最も特徴的な点をいくつか示します。
以前のバージョンと区別するためのものです。
2 つのプロファイルが同じかどうか、つまり時間の経過に伴ってプロファイルに変更が加えられたかどうかを判断するためのものです。プロファイルヘッダにあるこの新しい MD5 のチェックサムには直接アクセスできるほか、ColorSync の新しい API である
これらの新しいタグは ICC 4 プロファイルの新しい機能と柔軟性を実によく示しています。1 つ重要なことは、既存のタグのいくつかにも、これらの新しいデータ形式を含められるようになったことです。たとえば、' Mac OS X における CMMプロファイルと同様、CMM も複数の場所に置くことができます。通常、アプリケーションは、CMM を次の場所に置きます。 /Library/ColorSync/CMMs また、ユーザは、次の場所に個人の CMM (デバッグ用の CMM など)を置くことができます。 ‾/Library/ColorSync/CMMs アプリケーションにおいてユーザに CMM の一覧を提示したい場合には、 CMM の構築Mac OS X の CMM は、 Mac OS X の CMM には、 Apple CMM には多くの労力をかけて、さまざまなプロファイルのタイプおよびイメージデータ用の色空間をすべて正しく処理できるよう、微調整し Quartz と完全に統合するようにしました。独自の CMM を記述する場合は、必ず、さまざまな状況を想定して徹底的にテストをして、この環境で確実に機能するようにします。 ColorSync の環境設定と API のサポートClassic Mac OS では、カラーマネージメントを実行するアプリケーションは通常、システム上の各種デバイスの情報を持っていません。このため、アプリケーションでは、ユーザからデバイスの色情報を取得するために、何らかのインタフェースを提供する必要があります。同様に、プロファイルが対応付けられていないデータに対してカラーマネージメントを実行するアプリケーションは、そのデータを生成したデバイスのタイプを知る必要があります。この場合も、ユーザが色空間または文書のデフォルトのプロファイルを選択できるように何らかのインタフェースを提供する必要があります。ユーザは、時間が経つにつれ、カラーマネージメントを実行するアプリケーションが提供する実に多種多様のインタフェースに混乱し始めました。Mac OS X の ColorSync は、システム上のデバイスを認識するようになり、ColorSync ユーザインタフェースは、この情報を活用するように再設計されました。 標準の色空間のためのプロファイル文書には当然ながら、多種多様のデータ形式が含まれています。このメニューを使えば、ユーザは、さまざまな色空間のための文書プロファイルを指定できます。もちろん、文書にプロファイルがある場合はそのプロファイルが優先されます。しかし多くの場合、文書にはプロファイルが対応付けられていません。ユーザは、次のように、 enum { cmXYZData = 'XYZ ', cmLabData = 'Lab ', cmRGBData = 'RGB ', cmSRGBData = 'sRGB', ... }; CMGetDefaultProfileBySpace ( OSType space, CMProfileRef* prof ); space - 色空間。 prof - 指定した色空間のデフォルトのプロファイルを返します。 次に、アプリケーションが、これらの API を使うことで得られるメリットを示すコード例を示します。このコードは、イメージ参照を入力として受け取り、この参照に基づいて情報またはデータを取得しようとしています。文書のカラーマネージメントを行うときに、アプリケーションがまず行わなければならないのは、文書にプロファイルが埋め込まれているかどうかを確かめることです。今日のイメージ形式のほとんどは、プロファイル用のコンテナを持っているので、これらの形式の文書のプロファイルを取得する既知の方法もあります。しかし、文書に対応付けられているプロファイルがなかった場合には、最初に画像の色空間を取得した後、 次に、文書の出力先プロファイルを取得します。 この例に関して重要なことは、示されているコードは、Mac OS 9 で動作する Mac OS の Classic アプリケーションまたは Carbon アプリケーションに適切なコードであるという点です。Mac OS X では、出力先のカラーマネージメントの大部分は自動的に行われるので、アプリケーションが Quartz を使う場合には、出力先のためのプロファイルの対応付けは必要はありません。ただし、少なくともデータがどのデバイスからのものかは知っておく必要があり、プロファイルが対応付けられていない場合には、ColorSync API を使って対応させることができます。 「ColorSync」環境設定のためのコード例 CMError myMatchImage (myImageRef image) { CMProfileRef source, dest; CMWorldRef cw; CMBitMap bm; source = myGetEmbeddedProfile (image); if (source == nil) { space = myGetColorImageSpace (image); err = CMGetDefaultProfileBySpace (space, &source); } err = CMGetDefaultProfileByUse (cmDisplayUse, &dest); err = NCWNewColorWorld (&cw, source, dest); bm = myGetImageBitMap (image); err = CWMatchBitMap (cw, &bm, ..., ..., ...); ... 「ColorSync」環境設定に関するヒントMac OS 9 の ColorSync 3.0 と同様、Mac OS X の ColorSync を使うアプリケーションも、「ColorSync」コントロールパネルを起動して、デバイスと文書のためのデフォルトのプロファイルなどの色に関する選択、および優先する CMM 環境設定の指定ができます。ユーザは、ワークフローと呼ばれる、名前付きの色設定間の切り替えを行うこともできます。 アプリケーションから ColorSync を起動するには、次の関数を呼び出すだけです。 pascal CMError CMLaunchControlPanel (UInt32 flags); flags - このパラメータには 0 の値を渡さなければなりません。ColorSync の今後のバージョンでは、この flags パラメータに、ColorSync コントロールパネルの起動方法を指定する定数を定義することになるでしょう。 関数の結果 - CMError 型の結果コード。 アプリケーションで 「ColorSync」環境設定に関するまとめMac OS X ではすべてのデータが Quartz によってカラーマネージメントされるので、アプリケーションは、ソースデータと出力先データにプロファイルが対応付けるだけで、その恩恵を受けることができます。ほとんどのアプリケーションはカラーマネージメントのために、ColorSync Preferences API を使ってユーザの環境設定を取得できます。プロファイルにアクセスするためのこれらの API は拡張可能で、将来のデバイスと色空間のサポートに対する橋渡し役となります。最後に、ColorSync Preferences API は、アプリケーションが、文書またはデバイスのどちらの観点からもカラーマネージメントできるという点で、優れた柔軟性を提供します。 ColorSync のデバイスサポートMac OS X には、入力、表示、および印刷のための複数の新しいデバイスマネージャが組み込まれています。これにより、開発者は、ColorSync との組み合わせにより、デバイスを認識させたり、デバイスのプロファイルへのアクセスを提供したりできます。この新しいデバイスサポートには、次のサービスが実装されています。
デバイスとプロファイルの登録 ColorSync は、デバイスの有無を検出し、またデバイスのプロファイルを検索または構築する上で、デバイスマネージャに依存しています。次に、デバイスとプロファイルに関する情報を取得するために使用できる新しい ColorSync API を示します。 CMRegisterColorDevice CMError CMRegisterColorDevice( CMDeviceClass deviceClass, CMDeviceID deviceID, CFDictionaryRef deviceName, const CMDeviceScope * deviceScope); パラメータ deviceClass デバイスのクラス('scnr'、'cmra'、'prtr'、'mntr' など)。 deviceID クラスごとの一意の識別子(クラス + 一意に識別されるデバイスの ID )。 deviceName デバイスの名前。 deviceScope このデバイスが関係するユーザとホストのスコープを定義する構造体。 デバイスが、ColorSync (および MacOSX のほかの部分)で認識されるには、この API を使って自身を登録する必要があります。デバイスに、ColorSync プロファイルが対応付けられている場合には、デバイスの登録後、 CMUnregisterColorDevice CMError CMUnregisterColorDevice ( CMDeviceClass deviceClass, CMDeviceID deviceID ); パラメータ deviceClass デバイスのクラス('scnr'、'cmra'、'prtr'、'mntr' など)。 deviceID クラスごとの一意の識別子(クラス + 一意に識別されるデバイスの ID )。 デバイスを、(オフラインにするのではなく)今後システムで使用しないという場合には、登録を解除しなければなりません。デバイスを、一時的に停止したり接続を解除したりする場合には、登録を解除する必要はありませんが、デバイスドライバが、1) 今後使用しない(取り外す)ことが分かっている場合、または 2) デバイスなしにはそのプロファイルにアクセスできない場合、デバイスの登録を解除しなければなりません。 CMSetFactoryDeviceProfiles CMError CMSetFactoryDeviceProfiles ( CMDeviceClass deviceClass, CMDeviceID deviceID, CMDeviceProfileID defaultID, const CMDeviceProfileArray* deviceProfiles ); パラメータ deviceClass デバイスのクラス('scnr'、'cmra'、'prtr'、'mntr' など)。 deviceID クラスごとの一意の識別子(クラス + 一意に識別されるデバイスの ID )。 defaultID このデバイスのデフォルトプロファイルの ID。 deviceProfiles プロファイルの配列を格納する呼び出し側の記憶領域へのポインタ。 この API は、指定のデバイスにより使用されるプロファイルを設定します。この API は、デバイスの登録後、ColorSync にデバイスのプロファイルについて通知するために呼び出す必要があります。ファクトリデバイスプロファイルと現在のデバイスプロファイルでは API が区別されています。後者にはファクトリセットに対する変更が含まれている場合があるからです。 デフォルトのデバイスとデフォルトのプロファイル プロファイルおよび標準装置のためのこれらの新しい API は、任意のデバイスプロファイルへのアクセスではなく、デフォルトへのアクセスを提供します。デバイスのプロファイルを登録するとき、その 1 つをデバイスにとってのデフォルトとして指定します。ただし、ユーザがあとで設定を変えることもあります。ユーザが設定を変えると、デフォルトのデバイスまたはデフォルトのプロファイルが変わる場合があり、ColorSync は、デバイスマネージャによりこの変更を知らされます。デバイスマネージャは常に、どのデバイスがデフォルトかについて把握しています。 次に、デフォルトのデバイスとプロファイルを管理するための新しい API のいくつかを示します。 CMSetDefaultDevice CMError CMSetDefaultDevice ( CMDeviceClass deviceClass, CMDeviceID deviceID ); パラメータ deviceClass デバイスのクラス('scnr'、'cmra'、'prtr'、'mntr' など)。 deviceID クラスごとの一意の識別子(クラス + 一意に識別されるデバイスの ID )。 デバイス管理層は、デバイスクラスごとに、どの登録デバイスがデフォルトかを設定することができます。これにより、カラーマネージメントの選択は最小限で済み、デフォルトプリンタを出力プロファイルの選択肢とするなど、何らかの自動機能を可能にします。deviceClass と deviceID により指定されるデバイスが登録されていない場合には、エラーが返されます。 CMSetDeviceDefaultProfileID CMError CMSetDeviceDefaultProfileID ( CMDeviceClass deviceClass, CMDeviceID deviceID, CMDeviceProfileID defaultID ); 指定のデバイスのデフォルトのプロファイル ID は、 パラメータ deviceClass デバイスのクラス('scnr'、'cmra'、'prtr'、'mntr' など)。 deviceID クラスごとの一意の識別子(クラス + 一意に識別されるデバイスの ID )。 defaultID このデバイスのデフォルトプロファイルの ID。 キャリブレーションのサポート Mac OS X 上にあるこれらの新しいデバイスマネージャにより、ColorSync は現在、キャリブレーションのサポートを提供することができます。これは、ColorSync が、デバイスマネージャから渡されたプロファイルのデータによって実現されます。プロファイルは、ID とモード名(「plain paper」など)を伴って登録されます。プロファイルは、処理中は、ID により参照されます。このようなプロファイルはアプリケーションによってカスタマイズできます。たとえば、キャリブレーションアプリケーションは、指定のキャリブレーションモードにおけるファクトリプロファイルを取得し、そのモードに使用する新しいプロファイルを ID を指定して設定できます。 次に、プロファイルのカスタマイズをサポートする API を示します。 CMGetDeviceFactoryProfiles CMError CMGetDeviceFactoryProfiles ( CMDeviceClass deviceClass, CMDeviceID deviceID, CMDeviceProfileID* defaultID, UInt32* arraySize, CMDeviceProfileArray* deviceProfiles ); この API により呼び出し側は、指定のデバイスのオリジナルのプロファイルを取得できます。取得したプロファイルは、いずれかのファクトリプロファイルが置き換えられている(更新されている)場合には、そのデバイスについて実際に使われているプロファイルとは異なる可能性もあります。実際に使われているプロファイルを取得するには、 パラメータ deviceClass デバイスのクラス('scnr'、'cmra'、'prtr'、'mntr' など)。 deviceID クラスごとの一意の識別子(クラス + 一意に識別されるデバイスの ID )。 defaultID このデバイスのデフォルトプロファイル ID を格納する記憶領域へのポインタ。 arraySize 返される配列のサイズを格納する記憶領域へのポインタ。最初、呼び出し側は、このルーチンを呼び出してサイズを返させます。その後このルーチンを再度呼び出して配列を受け取るバッファのサイズを渡します。 deviceProfiles プロファイルの配列を受け取るための呼び出し側の記憶領域へのポインタ。呼び出し側は最初、このパラメータに NIL を渡し、arraySize パラメータの配列のサイズを受け取ります。その後、適切な大きさの領域が割り当てられたら、その領域へのポインタをこのパラメータに渡すことにより、配列をそのメモリにコピーすることができます。 CMSetDeviceProfiles CMError CMSetDeviceProfiles( CMDeviceClass deviceClass, CMDeviceID deviceID, const CMDeviceProfileScope * profileScope, const CMDeviceProfileArray * deviceProfiles); この API は、指定のデバイスによって使われるプロファイルを変更する手段を提供します。デバイスの登録後、キャリブレーションアプリケーションが、デバイスプロファイルをファクトリデフォルトからキャリブレートされたプロファイルに置き換えるために呼び出すことができます。この呼び出しを成功させるために、呼び出し側は、キャリブレーション対象のデバイスの パラメータ deviceClass デバイスのクラス('scnr'、'cmra'、'prtr'、'mntr' など)。 deviceID クラスごとの一意の識別子(クラス + 一意に識別されるデバイスの ID )。 profileScope これらのプロファイルが関係するスコープを定義する構造体。 deviceProfiles ファクトリプロファイルに換わるプロファイルを含むプロファイルの配列を格納する呼び出し側の記憶領域へのポインタ。この呼び出しで、オリジナルプロファイルをすべて置き換える必要はありません。したがって、配列には、プロファイルが 1 つしか含まれていない場合もあれば、ファクトリ配列にあったプロファイルがすべて置き換えられるのなら、その数だけ含まれている場合もあります。プロファイルは、ID に基づいて置き換えられます。 CMSetDeviceProfile CMError CMSetDeviceProfile( CMDeviceClass deviceClass, CMDeviceID deviceID, const CMDeviceProfileScope * profileScope, CMDeviceProfileID profileID, const CMProfileLocation * deviceProfLoc); この API は、指定のデバイスによって使われるプロファイルを、ID に基づいて変更する手段を提供します。デバイス登録後に、キャリブレーションアプリケーションが、デバイスプロファイルをファクトリデフォルトからキャリブレートされたプロファイルに置き換えるために呼び出すことができます。この呼び出しを成功させるために、呼び出し側は、キャリブレーション対象のデバイスの パラメータ deviceClass デバイスのクラス('scnr'、'cmra'、'prtr'、'mntr' など)。 deviceID クラスごとの一意の識別子(クラス + 一意に識別されるデバイスの ID )。 profileScope これらのプロファイルが関係するスコープを定義する構造体。 profileID このデバイスのデフォルトプロファイルの ID。 deviceProfLoc プロファイルの CMProfileLocation を格納する記憶領域へのポインタ。この構造体は、固定長の構造体なので、呼び出し側は、スタックベースの構造体、またはそのために割り当てられたメモリへのポインタを渡すことができます。 通知アプリケーションは、システム上のデバイスに対する変更の知らせを受け取れるようになりました。ColorSync は、通知を分散通知センターに送信します(分散通知センターの詳細については、Cocoa および Core Foundation の文献を参照してください)。分散通知センターに登録しているシステムのプロセスはすべて、これらの通知を受け取ります。次に、いくつかの利用可能な通知を示します。
上記の通知を受け取るために登録を行う ColorSync API はありません - ColorSync は、これらの通知を分散通知センターに送るだけです。上記の通知を受け取るには、代わりに、次の Cocoa と Core Foundation の API を使います。 CFNotificationCenterAddObserver NSDistributedNotificationCenter 次に、上記の関数で使用できる個別の通知文字列を示します(ColorSync インタフェースファイル、CMDeviceIntegration.h から抜粋)。 #define kCMDeviceRegisteredNotification CFSTR("CMDeviceRegisteredNotification") #define kCMDeviceUnregisteredNotification CFSTR("CMDeviceUnregisteredNotification") #define kCMDeviceOnlineNotification CFSTR("CMDeviceOnlineNotification") #define kCMDeviceOfflineNotification CFSTR("CMDeviceOfflineNotification") #define kCMDeviceStateNotification CFSTR("CMDeviceStateNotification") #define kCMDefaultDeviceNotification CFSTR("CMDefaultDeviceNotification") #define kCMDeviceProfilesNotification CFSTR("CMDeviceProfilesNotification") #define kCMDefaultDeviceProfileNotification CFSTR("CMDefaultDeviceProfileNotification") #define kCMPrefsChangeDeviceNotification CFSTR("AppleColorSyncPreferencesChangedNotification")
通知メカニズムの一般的な仕組みを示す次の Cocoa で書かれたコードは、ディスプレイプロファイルが変更されたときに通知を受け取る方法を示します。まず、必要な ColorSync デバイス通知を受け取るために、デフォルトの分散通知センターに登録をします。次に、通知を受け取ったら、単純に -(void)registerNotifications { NSDistributedNotificationCenter *center; center = [NSDistributedNotificationCenter defaultCenter]; [center addObserver:self selector:@selector(notification:) name:kCMDeviceUnregisteredNotification object:nil]; [center addObserver:self selector:@selector(notification:) name:kCMDefaultDeviceNotification object:nil]; [center addObserver:self selector:@selector(notification:) name:kCMDeviceProfilesNotification object:nil]; [center addObserver:self selector:@selector(notification:) name:kCMDefaultDeviceProfileNotification object:nil]; } -(void)notification:(NSNotification *)note { CMError err = CMGetDefaultProfileByUse(cmDisplayUse, &gProfRef); } プロファイル変更を調べる同じようなコードを、Mac OS X Core Foundation の分散通知を使用して書くことができます(NSDistributedNotificationCenter などを使用)。詳細については、Mac OS X Core Foundation のドキュメントを参照してください。 ColorSync デバイスサポートの要約ColorSync は現在、デバイスマネージャと統合されています。アプリケーションは、新しい ColorSync Preferences API を使って、標準装置(入力、ディスプレイ、出力)のデフォルトのプロファイルへアクセスできます。アプリケーションは、これらの API から登録デバイスに関するより具体的なプロファイル情報を取得できます。ColorSync では、キャリブレーションがサポートされるようになり、新しい通知サービスも提供されています。 ColorSync の Mac OS X v10.3 の変更箇所Mac OS X v10.3 "Panther" における ColorSync にはいくつかの変更箇所があります。それらについて、以下で取り上げます。 ColorSync チェーンアプリケーションによってシステムに持ち込まれ、各種の技法を使って操作される書類の最適な出力を保証するには、その過程の各段階でカラーマネージメントを行う必要があります。しかし、現実には、通常の書類がシステムの中で処理される間にカラーマネージメントが行われるかどうかは、時と場合によります。 例として、ある画像がシステム内を処理されていく過程を表す典型的な処理チェーンを以下に示します。 典型的な書類の ColorSync チェーン
上記は、長い処理チェーンであり、それぞれの段階でカラーマネージメントが必要になります。しかし、Mac OS X v10.2 では、このチェーンに弱いリンク、つまり正しいカラーマネージメントが行われるようにアプリケーションが余分な負担を抱えなければならない場所がありました。このような弱いリンクの例としては、後述のものがあります。 ColorSync チェーンの弱いリンク
Mac OS X v10.3 では変更が加えられ、アプリケーションが可能な限り容易に正しい出力を得られるようになっています。次に変更点のリストを示します。 ColorSync チェーンの固定リンク
印刷におけるカラーマネージメントMac OS X のカラーマネージメントの重要な特徴の 1 つに、プリントシステムのカラーマネージメントがあります。Mac OS X におけるプリントは、フロントエンドおよびバックエンドの 2 つの主要な要素で構成されます。フロントエンドの主要な役割は、プリンタを選び、必要なプリントオプションを取得し、プリントジョブを PDF としてスプールすることです。 バックエンドの主要な役割は、スプールされた PDF をプリンタに合った適切な形式に変換することです。 プリントフロントエンドをさらに詳しく見ると、スプール PDF の色データはすべてプロファイルがタグ付けされていることに気づきます。本質的に、フロントエンドでプリンタ固有の色変換が行われることはありませんが、プリントシステムが ColorSync デバイス統合化データベースに照会を行い、現在のプリント条件に合致するプロファイルを取得するという点に留意することが重要です。 バックエンドで何が行われるかは、使用するプリンタのタイプによって異なります。 ラスタプリンタの場合、スプール PDF はラスタ化され、色データはプリンタプロファイルに変換されます。これは、プリンタプロファイルをプリントジョブから抽出することによって実現されます。プロファイルが存在しなければ、プリントシステムはデフォルトのプロファイルを提供することでマッチングを可能にします。 PostScript プリンタの場合には、選択肢が 2 つあります。最初の選択肢は、プリンタにおける従来のカラーマッチングです。この場合、スプール PDF のすべてのプロファイルが PostScriopt CSA に変換されます。 ColorSync によるホスト上での新しいカラーマッチングPanther では、ColorSync を使用してコンピュータ上でカラーマッチングを行う新しい選択肢があります。この場合、ラスタプリントと同様に、プロファイルはプリントジョブから取得されます。プロファイルが存在しなければ、プリントシステムはデフォルトのプロファイルを提供することでカラーマッチングを可能にします。 新しい PPD 宣言エントリCUPS PostScript ドライバおよびラスタドライバ用に、PPD ファイルに リスト 1. 新しい PPD 宣言エントリ *cupsICCProfile {モード指定子} {プロファイル指定子} ここで「モード指定子」は、色モデル、メディアタイプ、および解像度の 3 つのフィールドを連結したものです。モデル/メディア/解像度を指定するいずれのフィールドも省略可能です。「プロファイル指定子」は、プロファイルの標準ファイルパスで、/usr/share/cups/profiles/ からの相対パスを指定します。 次の例は、2 つのモードを登録する PostScript プリンタ PPD ファイルの例です。600×600 dpi および 1200×1200 dpi の 2 つのモードにそれぞれプロファイル指定子が続いています。 リスト 2. 2 つのモードを登録する PostScript PPD ファイルの例 *%======================== *% Device capabilities *%======================== *ColorDevice: True *DefaultColorSpace: CMYK *cupsICCProfile ..600x600dpi "cmykProfile600dpi.icc" *cupsICCProfile ..1200x1200dpi "cmykProfile1200dpi.icc" この新しい PPD キーワードについては、テクニカル Q&A QA1352「New PPD keywords available in Mac OS X version 10.3」 でも詳しく説明しています。 Quartz フィルタQuartz フィルタは、Quartz のイメージングおよびカラーマッチングのパイプラインにおける新しいオプションコンポーネントです。Quartz フィルタを使用して、1 つの画像に一連のイメージング処理と色補正処理を関連付けられます。フィルタは、すべての描画処理あるいは特定の描画処理のセットのどちらも対象にできます。フィルタを構成して、特殊なイメージング処理や色処理を行うようにできます。また、フィルタを XML 形式で定義して保存することも可能です。 次に、Quartz フィルタコンポーネントが Quartz のアーキテクチャにどのように組み込まれているかを示します。 ![]() 図 14. Quartz アーキテクチャにおける Quartz フィルタコンポーネント Quartz フィルタは現時点では、Mac OS X システムのユーティリティおよびアプリケーションを通じてのみ利用できます。しかし、新しい API セットの提供も予定されています。 Quartz フィルタのデモソフトプルーフ(色校正)プリントダイアログから Quartz フィルタを利用したソフトプルーフが可能になりました。単純にプリントダイアログの「プレビュー」ボタンをクリックすると、「プレビュー」ウィンドウの左下角に「ソフトプルーフ」というタイトルのチェックボックスが表示されます。次のように表示されます。 ![]() 図 15. 新しいソフトプルーフ機能 プリントダイアログ図に示した画像は、非常に暗いように見えます。新しい ColorySync プリンタダイアログ拡張(PDE)を使用すれば、これを補正できます。 新しい ColorSync PDE 機能にアクセスするには、プリントダイアログを開き、メニューリストの中で「ColorSync」という項目を探します。 ![]() 図 16. 新しい ColorSync PDE この新しい ColorSync PED によって、PostScript プリンタでは「カラー変換」ポップアップメニューを通じて、どのカラーマッチングオプションを使用するかを選べるようになりました。「標準」または「プリンタのカラー」のどちらかを選択します。 ![]() 図 17. カラー変換の選択 カラー変換オプションを使用することで、プリンタプロファイルを使用してコンピュータ上でカラーマッチングを行うことも(「標準」を選択)、プリントパスにおける従来のカラーマッチング(「プリンタのカラー」を選択)を利用することもできます。 最後に、新しい ColorSync PDE の「Quartz フィルタ」メニューの最後に、プリント時に Quartz フィルタを追加するオプションがあります。 ![]() 図 18. 「Quartz フィルタ」のメニュー項目 このオプションを選択すると、書類が PDF としてスプールされ、ColorSync ユーティリティに「オープン」(' ![]() 図 19. フィルタインスペクタウィンドウ リストの任意のフィルタをクリックし、「プレビュー」チェックボックスもクリックすると、選択したフィルタを適用した結果を見ることができます。「新規」ボタンおよび「削除」ボタンをクリックしてフィルタの追加と削除が行えます。 それぞれのフィルタについて、管理可能ないくつかの異なるオプションがあります。次のものが含まれます。
Panther における ColorSync ユーティリティの変更箇所ColorSync 初期設定の新しい場所ColorSync 初期設定の場所が ColorSync ユーティリティに移されました(以前は、システム環境設定に含まれていました)。これに伴い、ColorSync ユーティリティが今まで以上に ColorSync 関連のあらゆる設定に利用できる「ワンストップショップ」となります。 また、多くのアプリケーションでは、プログラムのユーザインタフェースの中に、ユーザを ColorSync 初期設定に導くボタンを用意することがよく知られています。これは通常、 Quartz フィルタのサポートユーザは、ColorSync ユーティリティから Quartz フィルタにアクセスできます。Quartz フィルタの詳細については、「Quartz フィルタ」を参照してください。 管理機能ColorSync ユーティリティには、システム管理ユーザが同じマシン上の他のユーザが使用できるデフォルトのプロファイルを指定するための新しい管理機能が含まれています。 プロファイルビューアの新しい 3D 表示オプションColorSync ユーティリティの 3D プロファイルビューアには、プロファイルを Lab、Luv、Yxy、その他の各種色空間で表示するための新しいコンテキストメニューがあります。次のように表示されます。 ![]() 図 20. 新しい 3D ビューアのコンテキストメニュー プロファイルビューアを使用して 2 つのプロファイルのガマットを比較することも可能です。比較するプロファイルのペアの最初の対象を指定するために、「比較のために保留」という新しいコンテキストメニュー項目が追加されています。ビューアペイン内のプロファイルの上で、Control キーを押しながらクリックしてコンテキストメニューを表示させ、「比較のために保留」を選択します。次の図のように、選択されたことを示すためにプロファイルの色が薄くなります。 ![]() 図 21. 新しい「比較のために保留」メニュー項目 続いて、リストから別のプロファイルを選択すると、ビューアペインに両方のプロファイルが同時に表示され、重なりも分かります。 ![]() 図 22. 2 つのプロファイルのガマットの比較 新しい ColorSync API開発者が ColorSync と OpenGL(詳細については、「ColorSync と OpenGL」を参照)を使用してリアルタイムでの色補正をさらに容易に行えるように、ColorSync にいくつかの新しい API が追加されました。これらの新しい API について、以下で説明します。 最初の新しい API は
CMMakeProfile CMError CMMakeProfile(CMProfileRef prof, CFDictionaryRef spec) 説明 ディスプレイプロファイルまたは抽象プロファイルが仕様辞書に基づくように、プロファイルに適切なタグを追加します。 パラメータ prof(in/out) 修正対象のプロファイル。 spec(in) 仕様辞書 仕様辞書のキーの 1 つは " " "
" " ( " (void から変換)
" " " " " " " " " 以下 " " " " " " または以下 " " " 以下 " " または以下 "
" " " あるいは、" 次のコードは、 void myLabToLabProc(float* L, float* a, float* b, void* refcon) { float angle = *(float*)refcon; float aa = (*a), bb = (*b); *a = aa*cos(angle) - bb*sin(angle); *b = aa*sin(angle) + bb*cos(angle); } void makeAbstractWithAngle (CMProfileRef prof, float angle) { CFDictionaryRef dict; SInt64 cb64, rc64; SInt32 gridPoints; CFStringRef keys[4]; CFTypeRef vals[4]; CMError cmErr; keys[0] = CFSTR("profileType"); vals[0]= CFSTR("abstractLab"); gridPoints = 33; keys[1] = CFSTR("gridPoints"); vals[1]= CFNumberCreate(0, kCFNumberSInt32Type, &gridPoints); cb64 = (SInt64) myLabToLabProc; keys[2] = CFSTR("proc"); vals[2]= CFNumberCreate(0, kCFNumberSInt64Type, &cb64); rc64 = (SInt64) ∠ keys[3] = CFSTR("refcon"); vals[3]= CFNumberCreate(0, kCFNumberSInt64Type, &rc64); dict = CFDictionaryCreate(nil, keys, vals, 4, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); cmErr = CMMakeProfile(prof, dict); CFRelease(vals[1]); CFRelease(vals[2]); CFRelease(vals[3]); CFRelease(dict); }
ビデオ出力のリアルタイム色補正をサポートするために追加されたもう 1 つの API は
CWFillLookupTexture CMError CWFillLookupTexture( CMWorldRef cw, UInt32 gridPoints, UInt32 format, UInt32 dataSize, void * data) 説明 この API は、カラーワールドに基づいて 3D の参照テクスチャを埋めます。結果のテーブルは、ハードウェアでのカラーマネージメントの高速化のために OpenGL での使用に適しています。 パラメータ cw(in) 使用するカラーワールド。
テクスチャ内のチャネルごとのグリッドポイント数。 format(in) テクスチャ内のピクセルの形式(例: dataSize(in) データを埋めるテクスチャのバイト単位のサイズ data(in/out) データを埋めるテクスチャへのポインタ 次に、この void* make_3d_texture(CMProfileRef src, CMProfileRef abs, CMProfileRef dst) { UInt32 size, grid = 9, fmt = cmTextureRGBtoRGBX8; CMWorldRef cw; void* data; CMError err; cw = make_colorworld(src, abs, dst); err = CWFillLookupTexture(cw, grid, fmt, &size, nil); data = malloc(size); err = CWFillLookupTexture(cw, grid, fmt, &size, &data); return data; } ColorSync と OpenGLColorSync と OpenGL を使用してビデオ出力のリアルタイムでの色補正と改善が行えます。これまでは、このような処理は非常にハイエンドのハードウェアでのみ可能でしたが、現在は高性能なビデオカードが入手できるようなったおかげで、デスクトップでも可能になりました。 最近の多くのビデオカードでは、ピクセル単位の 3D テクスチャ参照がサポートされています。現時点では、次のビデオカードで利用可能です。
色補正変換をこれらのテーブルにロードすることで、リアルタイムでの色補正を実現できます。これは非常に強力であり、Mac OS X で利用可能なすべてのグラフィックス技術の総合力を示すものです。ColorSync、OpenGL、QuickTime、および Quartz の利点と能力の組み合わせたものとなります。 仕組みとしては、QuickTime コンテンツが Quartz OpenGL サーフェスで再生され、そのサーフェスに ColorSync カラーワールド参照に基づく 3D テクスチャがアタッチされているというものです。 アプリケーションでこれを容易に実現できるように、ColorSync にいくつかの新しい API が追加されました。最初の 1 つが 2 つ目の新しい API は これらの新しい API の詳細については、「新しい ColorSync API」を参照してください。 また、Mac OS X Developer Tools にサンプルコードもあります。サンプルコードは、上に示した API を使用してリアルタイムでの色補正を行う方法を示します。Mac OS X Developer Tools をダウンロードして、次の場所にある "ColorWhirled" サンプルを探してください。 /Developer/Examples/ColorSync/ColorWhirled ディスプレイのキャリブレーションディスプレイのキャリブレーションは、Mac OS X の以前のすべてのバージョンに存在した機能です。ディスプレイのプロファイルをユーザが自動的に生成し、ディスプレイを簡単な操作で補正する手段を提供します。ディスプレイのキャリブレーションは、「ディスプレイ」初期設定(システム環境設定内にあります)の「補正」ボタンをクリックして実施します。 以前までは、このボタンをクリックすると Apple キャリブレータが呼び出されました。サードパーティ製のキャリブレータもサポートされていましたが、システムには組み込まれていませんでした。Mac OS X v10.3 では、サードパーティ製のキャリブレータに対するサポートがアーキテクチャに追加されました。 キャリブレータを ColorSync に認識してもらうには、いくつかの簡単な修正を加える必要があります。以下に簡単にまとめます。 独自キャリブレータに対するサポート
参考にできるように、Developer Tools とともにインストールされるキャリブレータのサンプルが次の場所にあります。 /Developer/Examples/ColorSync/ 「DemoCalibrator」というプロジェクトがあるはずです。このサンプルコードは、キャリブレータに上記の変更を加える方法を示すものです。このサンプルを自分のキャリブレータの出発点として利用してください。 仕組みを知るために、このサンプルキャリブレータをビルドし、ビルドした実行可能ファイルを /Library/ColorSync/Calibrators/ にインストールします。次に、ディスプレイ初期設定(システム環境設定内)を開き、「カラー」タブをクリックしてから「補正」ボタンをクリックします。すると、新しいダイアログが表示され、インストール済みのキャリブレータから使用するものを選べます。ダイアログは次のように表示されます。 ![]() 図 23. キャリブレータ選択ダイアログ Apple キャリブレータの変更箇所Mac OS X v10.3 の Apple キャリブレータでは、いくつかの機能が強化されています。それらの実際の動作を知るには、「ディスプレイ」初期設定を開き、「カラー」タブをクリックしてから「補正」ボタンをクリックし、最後にリスト内の「ディスプレイキャリブレータ」(Apple キャリブレータ)を選択します。次に「補正」ボタンをクリックし、表示されたウィンドウで「詳細モード」チェックボックスをクリックして詳細モードを有効にします。Apple キャリブレータの強化された機能を見るにはこのモードにしておく必要があります。 Apple キャリブレータの新しい機能には、より詳細な制御を可能にする、シングルパッチを表示する機能、および濃淡と輝度を調整する機能があります。この機能強化は、青のガンマが人間の目には他より見にくく、ユーザが調整するのが難しいために行われました。 また、Apple キャリブレータでは複数のステップが可能です。つまり、中間階調の調整の加え、ハイライト、影、濃い影の調整も可能になりました。結果として、複雑なガンマ曲線を持つ液晶ディスプレイで優れたキャリブレーションを実現できます。 最後に、Apple キャリブレータでは、キャリブレーションプロファイルを同じマシン上の他のユーザが使用することも可能です。 SIPSSIPS は、Scriptable Image Processing System(スクリプト可能イメージ処理システム)の略です。SIPS は、スクリプトを使用して画像ファイルに対して多くの一般的な操作が行えるツールが必要と考えられたために作成されました。 すでに、画像の操作を行うための技術はいくつか存在します。たとえば、ColorSync Scripting では、画像のカラーマッチングを含むさまざまな処理が可能ですが、形式の回転、拡大縮小、変換はできません。Image Capture Scripting では、画像の回転は可能ですが、カラーマッチングおよび形式の変換はできません。最後に、プレビューアプリケーションは、画像の回転、拡大縮小、形式の変換は可能ですが、AppleScript に対応していません。 SIPS は、これらの異なる技術をすべて統合し、画像を対象に一般的な操作を行う単独のツールを提供します。SIPS の現在の機能のセットには次が含まれます。
SIPS の将来のリリースで考えられる機能は次のとおりです。
SIPS は現在単純なコンパイル済みのツールとして実装されており、/usr/bin/sips にインストールされています。SIPS は CoreGraphics、QuickTime および ColorSync にリンクされています。一度に 1 つまたは複数のファイルを対象に処理が行えます。また、画像およびプロファイルの照会と変更が可能です。SIPS のクエリは、プロパティを単純なテキスト形式または XML 形式で返せます。アクションは、ファイルにそのまま変更を加えることも、出力ディレクトリの中で変更を加えることもできます。 SIPS は単純なコマンドラインツールなので、さまざまな使い方があります。ターミナルのシェルから起動することも、AppleScript から、他のスクリプティング言語から、あるいはアプリケーションから C 言語のコードを使って(AppKit または Posix 呼び出し)起動することもできます。 たとえば、ターミナルを開いて $ sips --help sips 1.0 - scriptable image processing system. This tool is used to query or modify raster image files and ColorSync ICC profiles. Its functionality can also be used through the "Image Events" AppleScript suite. Usages: sips [-h, --help] sips [-H, --helpProperties] sips [image query functions] imagefile(s) sips [profile query functions] profile(s) sips [image modification functions] imagefile(s) [--out outimage | --out outdir] sips [profile modification functions] profile(s) [--out outprofile | --out outdir] Profile query functions: -g, --getProperty key -X, --extractTag tag tagFile -v, --verify Image query functions: -g, --getProperty key -x, --extractProfile profile Profile modification functions: -s, --setProperty key value -d, --deleteProperty key --deleteTag tag --copyTag srcTag dstTag --loadTag tag tagFile --repair Image modification functions: -s, --setProperty key value -d, --deleteProperty key -e, --embedProfile profile -E, --embedProfileIfNone profile -m, --matchTo profile -M, --matchToWithIntent profile intent -r, --rotate degreesCW -f, --flip horizontal|vertical -c, --cropToHeightWidth pixelsH pixelsW -p, --padToHeightWidth pixelsH pixelsW -z, --resampleHeightWidth pixelsH pixelsW --resampleWidth pixelsW --resampleHeight pixelsH -Z, --resampleHeightWidthMax pixelsWH -i, --addIcon 次は、SIPS コマンドを使用して画像を 30 度回転させる例です。 $sips -r 30 /Users/steve/image.JPG 次は、SIPS コマンドを使用して画像のプロパティ(画像の高さ)を取得する例です。 まず、 $sips --helpProperties Special properties: all binary data allxml binary data Image properties: dpiHeight float dpiWidth float pixelHeight integer (read-only) pixelWidth integer (read-only) format string jpeg | tiff | png | gif | jp2 | pict | bmp | qtif | psd formatOptions string default | [low|normal|high] | packbits space string (read-only) samplesPerPixel integer (read-only) bitsPerSample integer (read-only) creation string (read-only) make string model string software string (read-only) description string copyright string artist string profile binary data Profile properties: description utf8 string size integer (read-only) cmm string version string class string (read-only) space string (read-only) pcs string (read-only) creation string platform string quality string normal | draft | best deviceManufacturer string deviceModel integer deviceAttributes0 integer deviceAttributes1 integer renderingIntent string perceptual | relative | satuation | absolute creator string copyright string md5 string (read-only) 次に、画像プロパティ修飾子を指定してコマンドを実行します。 $ sips -g dpiHeight image.JPG image.JPG dpiHeight: 216.000 参考資料
ドキュメントの改訂履歴
掲載日: 2004-06-25 |